﻿#include "WRWorkAffair.h"
#include "WRWorkProcess.h"

//初始化工作事务。
WRWorkAffair::WRWorkAffair(WRWorkObject* object)
    : m_refCnt(1), m_object(object), m_affair(0)
{
    m_object->addRef();
}
//初始化工作事务。
WRWorkAffair::WRWorkAffair(WRWorkAffair* affair)
    : m_refCnt(1), m_object(affair->object()), m_affair(affair)
{
    m_affair->addRef();
}

//清理当前对象所占用的相关资源。
WRWorkAffair::~WRWorkAffair(void)
{
    if (m_affair)
        m_affair->release();
    else
        m_object->release();
}

//查询指定标识的工作处理者。
WRWorkDealer* WRWorkAffair::queryWorkDealer(const QUuid&)
{
    return 0;
}
//查询指定标识的任务处理者。
WRTaskDealer* WRWorkAffair::queryTaskDealer(const QUuid&)
{
    return 0;
}
//查询指定标识的数据源接口。
WRDataSource* WRWorkAffair::queryDataSource(const QUuid&)
{
    return 0;
}
//查询指定标识的事件源接口。
WREventSource* WRWorkAffair::queryEventSource(const QUuid&)
{
    return 0;
}
//查询指示标识的状态源接口。
WRStateSource* WRWorkAffair::queryStateSource(const QUuid&)
{
    return 0;
}

//表示工作处理事务。
class WRWorkProcessAffair : public WRWorkAffair
{
private:
    //处理者。
    WRWorkProcess* m_process;

public:
    //初始化工作事务。
    WRWorkProcessAffair(WRWorkObject* object, WRWorkProcess* process)
        : WRWorkAffair(object)
    {
        m_process = process;
        m_process->addRef();
    }
    //初始化工作事务。
    WRWorkProcessAffair(WRWorkAffair* affair, WRWorkProcess* process)
        : WRWorkAffair(affair)
    {
        m_process = process;
        m_process->addRef();
    }

    //清理当前对象所占用的相关资源。
    ~WRWorkProcessAffair()
    {
        m_process->release();
    }

    //查询指定标识的任务处理者。
    WRTaskDealer* queryTaskDealer(const QUuid& uuid)
    {
        return m_process->queryTaskDealer(uuid);
    }
    //查询指定标识的数据源接口。
    WRDataSource* queryDataSource(const QUuid& uuid)
    {
        return m_process->queryDataSource(uuid);
    }
    //查询指定标识的事件源接口。
    WREventSource* queryEventSource(const QUuid& uuid)
    {
        return m_process->queryEventSource(uuid);
    }
    //查询指示标识的状态源接口。
    WRStateSource* queryStateSource(const QUuid& uuid)
    {
        return m_process->queryStateSource(uuid);
    }
};

//创建指定对象的工作处理事务包装。
WRWorkAffair* WRWorkAffair::create(WRWorkObject* object, WRWorkProcess* process)
{
    return new WRWorkProcessAffair(object, process);
}
//创建指定对象的工作处理事务包装。
WRWorkAffair* WRWorkAffair::create(WRWorkAffair* affair, WRWorkProcess* process)
{
    return new WRWorkProcessAffair(affair, process);
}
